package com.sh.weblogspringboot.jwt.handler;

import com.sh.weblogspringboot.common.enums.ResponseCodeEnum;
import com.sh.weblogspringboot.common.util.Response;
import com.sh.weblogspringboot.jwt.util.ResultUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.stereotype.Component;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author songHai
 * @Classname RestAccessDeniedHandler
 * @Description 处理器，它主要用于处理当用户登录成功时，访问受保护的资源，但是权限不够的情况：
 * @Date 2025/3/27 1:13
 */
@Component
@Slf4j
public class RestAccessDeniedHandler implements AccessDeniedHandler {

    @Override
    public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
        log.warn("登录成功访问收保护的资源，但是权限不够: ", accessDeniedException);
        // 预留，后面引入多角色时会用到
        // 因为暂时 weblog 项目只有一个用户，他的角色是：超级管理员，此角色拥有所有的操作权限，所以此处理器并不会被使用到，这里添加上，是为了后续可能引入多角色时，方便拓展使用。
        ResultUtil.fail(response, Response.fail(ResponseCodeEnum.FORBIDDEN));
    }
}
